package com.hubiao.basics.serializable;

import org.apache.commons.lang3.SerializationUtils;

/**
 * Description
 *
 * @author hubiao
 * @since 2021-01-14 14:11
 */
public class SerializableDemo {

    /***
     *
     * 1.序列化对象必须实现序列化接口。
     * 2.序列化对象里面的属性是对象的话也要实现序列化接口。
     * 3.类的对象序列化后，类的序列化ID不能轻易修改，不然反序列化会失败。
     * 4.类的对象序列化后，类的属性有增加或者删除不会影响序列化，只是值会丢失。
     * 5.如果父类序列化了，子类会继承父类的序列化，子类无需添加序列化接口。
     * 6.如果父类没有序列化，子类序列化了，子类中的属性能正常序列化，但父类的属性会丢失，不能序列化。
     * 7.用Java序列化的二进制字节数据只能由Java反序列化，不能被其他语言反序列化。如果要进行前后端或者不同语言之间的交互一般需要将对象转变成Json/Xml通用格式的数据，再恢复原来的对象。
     * 8.如果某个字段不想序列化，在该字段前加上【transient关键字】即可。
     *
     * @param args
     */
    public static void main(String[] args) {
        User user = new User();
        user.setName( "胡彪" );
        user.setSex( "男" );
        user.setHobby( "篮球" );
        //将对象序列化为一种二进制字节的数组，保存在磁盘或者传输网络，达到持久化的效果
        byte[] serialize = SerializationUtils.serialize( user );
        //磁盘或者网络传输使用者可以通过反序列化的操作得到这个对象
        User userTemp = SerializationUtils.deserialize( serialize );
        System.out.println( user );
        System.out.println( userTemp );
    }


}
